/*!
 * \file WtDistExecuter.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 分布式执行器头文件
 * 
 * 分布式执行器是WonderTrader系统中用于分布式交易执行的组件，
 * 主要功能包括：
 * 1. 分布式持仓目标管理
 * 2. 持仓变动广播
 * 3. 多节点协调执行
 * 4. 负载均衡和容错处理
 * 
 * 与本地执行器不同，分布式执行器主要负责协调和分发任务，
 * 实际的交易执行由各个分布式节点完成。
 */
#pragma once
#include "IExecCommand.h"

NS_WTP_BEGIN
class WTSVariant;

/**
 * @class WtDistExecuter
 * @brief 分布式执行器类
 * 
 * 分布式执行器实现了分布式交易执行的核心功能：
 * 1. 持仓目标的分布式管理和同步
 * 2. 执行指令的分发和协调
 * 3. 多节点间的负载均衡
 * 4. 容错和故障恢复机制
 * 5. 实时行情数据的分发
 * 
 * 该类继承自IExecCommand接口，提供统一的执行器接口，
 * 但内部实现为分布式架构。
 */
class WtDistExecuter : public IExecCommand
{
public:
	/**
	 * @brief 构造函数
	 * @param name 执行器名称
	 * 
	 * 初始化分布式执行器，设置执行器名称
	 */
	WtDistExecuter(const char* name);
	
	/**
	 * @brief 析构函数
	 * 
	 * 清理分布式执行器资源
	 */
	virtual ~WtDistExecuter();

public:
	/**
	 * @brief 初始化执行器
	 * @param params 初始化参数
	 * @return 是否初始化成功
	 * 
	 * 根据配置参数初始化分布式执行器，包括缩放比例等设置
	 */
	bool init(WTSVariant* params);

public:
	//////////////////////////////////////////////////////////////////////////
	// IExecCommand接口实现
	
	/**
	 * @brief 设置目标持仓
	 * @param targets 目标持仓映射表
	 * 
	 * 设置各个合约的目标持仓，并广播到分布式节点
	 */
	virtual void set_position(const faster_hashmap<LongKey, double>& targets) override;

	/**
	 * @brief 合约持仓变动回调
	 * @param stdCode 标准合约代码
	 * @param targetPos 目标持仓
	 * 
	 * 当某个合约的目标持仓发生变化时的回调函数，
	 * 负责将变动广播到分布式节点
	 */
	virtual void on_position_changed(const char* stdCode, double targetPos) override;

	/**
	 * @brief 实时行情回调
	 * @param stdCode 标准合约代码
	 * @param newTick 新的Tick数据
	 * 
	 * 接收实时行情数据的回调函数，分布式执行器通常不需要处理ontick事件
	 */
	virtual void on_tick(const char* stdCode, WTSTickData* newTick) override;

private:
	WTSVariant*			_config;		///< 配置信息
	uint32_t			_scale;			///< 缩放比例
	faster_hashmap<std::string, double> _target_pos;	///< 目标持仓映射表
};

NS_WTP_END

